const { Controller } = require("egg");

class CodeController extends Controller {
    /**
     * 生成验证码
     */
    async create() {
        // 查询参数     this.ctx.query·
        // 路径参数     this.ctx.params
        // 请求体参数   this.ctx.request.body
        // 获取手机号，按照 RESTful 规范
        const { mobile } = this.ctx.request.body; // 路由该怎么定义
        // 拿手机号，去数据库 code 表中，找到该手机号有没有对应的验证码记录
        const code = await this.service.code.findByMobile(mobile);
        // 判断存不存在
        if (code) {
            // 校验时间，小于 60 秒不重复获取
            if (Date.now() - Date.parse(code.create_time) < 60000) {
                this.ctx.body = {
                    code: 403,
                    message: "不能频繁获取验证码",
                };
                return;
            }
            // 大于 60 秒，删除旧的验证码
            await this.service.code.remove(mobile);
        }
        // 生成验证码
        const codeNum = Math.ceil(Math.random() * 1000000);
        // 调用 API  发送短信服务 ...
        // 保存数据库
        const res = await this.service.code.add(mobile, codeNum);
        // 是否存入成功
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: "验证码发送失败",
            };
            return;
        }
        // 发送成功
        this.ctx.body = {
            code: 201,
            message: "验证码发送成功",
        };
    }
}

module.exports = CodeController;
